#pragma once

#include <string>
#include <vector>
#include <utility>
#include <cstdint>

namespace sysmonitor {
namespace utils {

class UnitConverter {
public:
    enum class Unit {
        B,    // 字节
        KB,   // 千字节
        MB,   // 兆字节
        GB,   // 吉字节
        TB    // 太字节
    };

    // 转换字节数到指定单位
    static double convertBytes(uint64_t bytes, Unit targetUnit);

    // 自动选择最合适的单位并转换
    static std::pair<double, Unit> autoConvertBytes(uint64_t bytes);

    // 将单位枚举转换为字符串表示
    static std::string unitToString(Unit unit);

    // 将字节数格式化为带单位的字符串
    static std::string formatBytes(uint64_t bytes);
};

// 字符串工具函数
namespace string {
    // 修剪字符串两端的空白字符
    std::string trim(const std::string& str);

    // 分割字符串
    std::vector<std::string> split(const std::string& str, char delimiter);

    // 将字符串转换为无符号长整数
    bool stringToULongLong(const std::string& str, uint64_t& result);
}  // namespace string

}  // namespace utils
}  // namespace sysmonitor
